package controll;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import modell.Casa;
import modell.Obra;
import modell.Torre;

@ManagedBean(name = "tipologiaBean")
@RequestScoped
public class TipologiaBean {
	private Torre torreSelecionada = new Torre();
	private Casa casaSelecionada = new Casa();
	private Obra obraSelecionada = new Obra();

	private List<Torre> listaTorres = null;
	private List<Casa> listaCasas = null;
	private List<SelectItem> obrasSelect;

	public String salvarTorre() {

		try {
			torreSelecionada.setObra(obraSelecionada);
			torreSelecionada.setDataCadastro(new Date());
			TorreRN torreRN = new TorreRN();
			FacesMessage faces = null;
			if (PesquisarTorre() == null) {
				if (torreSelecionada.getQuantidade() != 0
						&& torreSelecionada.getQtdAptPavimento() != 0
						&& torreSelecionada.getQtdApartamentos() != 0) {
					if (this.torreSelecionada.getId() != null
							&& this.torreSelecionada.getId() != 0) {
						torreRN.alterar(torreSelecionada);
						faces = new FacesMessage("Torre editada com sucesso!");
					} else {
						torreRN.salvar(torreSelecionada);
						faces = new FacesMessage(
								"Torre cadastrada com sucesso!");
					}
				} else {
					faces = new FacesMessage("Obs: Quantidades acima de '0'");
				}
			} else {
				faces = new FacesMessage(
						"TORRES JÁ CADASTRADAS PARA ESTA OBRA!");
			}

			FacesContext contexto = FacesContext.getCurrentInstance();
			contexto.addMessage(null, faces);
			this.listaTorres = null;
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

		return null;
	}

	public String excluirTorre() {
		TorreRN torreRN = new TorreRN();
		torreRN.excluir(torreSelecionada);
		this.listaTorres = null;
		return null;
	}

	public String novaTorre() {
		this.torreSelecionada = new Torre();
		return null;
	}

	public Torre PesquisarTorre() {
		TorreRN torreRN = new TorreRN();

		Torre torrePesquisada = torreRN.pesquisarTorre(torreSelecionada.getObra().getId());
		return torrePesquisada;
	}

	public Casa PesquisarCasa() {
		CasaRN casaRN = new CasaRN();

		Casa casaPesquisada = casaRN.pesquisarCasa(casaSelecionada.getObra()
				.getId());
		return casaPesquisada;
	}

	public List<Torre> getListaTorres() {
		TorreRN torreRN = new TorreRN();
		if (listaTorres == null) {
			listaTorres = torreRN.listar();
		}
		return listaTorres;
	}

	public List<SelectItem> getObrasSelect() {
		if (this.obrasSelect == null) {
			obrasSelect = new ArrayList<SelectItem>();
			ObraRN obraRN = new ObraRN();
			List<Obra> listaObra = obraRN.listarAtivos(true);
			if (listaObra != null && !listaObra.isEmpty()) {
				SelectItem item;
				for (Obra obraLista : listaObra) {
					item = new SelectItem(obraLista, obraLista.getNome());
					obrasSelect.add(item);
				}
			}
		}
		return obrasSelect;
	}

	public Obra getObraSelecionada() {
		return obraSelecionada;
	}

	public void setObraSelecionada(Obra obraSelecionada) {
		this.obraSelecionada = obraSelecionada;
	}

	public Torre getTorreSelecionada() {
		return torreSelecionada;
	}

	public void setTorreSelecionada(Torre torreSelecionada) {
		this.torreSelecionada = torreSelecionada;
	}

	public void setListaTorres(List<Torre> listaTorres) {
		this.listaTorres = listaTorres;
	}

	public void setObrasSelect(List<SelectItem> obrasSelect) {
		this.obrasSelect = obrasSelect;
	}

	//

	public Casa getCasaSelecionada() {
		return casaSelecionada;
	}

	public void setCasaSelecionada(Casa casaSelecionada) {
		this.casaSelecionada = casaSelecionada;
	}

	public List<Casa> getListaCasas() {
		CasaRN casaRN = new CasaRN();
		if (listaCasas == null) {
			listaCasas = casaRN.listar();
		}
		return listaCasas;
	}

	public void setListaCasas(List<Casa> listaCasas) {
		this.listaCasas = listaCasas;
	}

	public String salvarCasa() {

		try {
			casaSelecionada.setObra(obraSelecionada);
			casaSelecionada.setDataCadastro(new Date());
			CasaRN casaRN = new CasaRN();
			FacesMessage faces = null;
			if (PesquisarCasa() == null) {
				if (casaSelecionada.getQuantidade() != 0
						&& casaSelecionada.getQtdCasaMod() != 0)
					{
					if (this.casaSelecionada.getId() != null
							&& this.casaSelecionada.getId() != 0) {
						casaRN.alterar(casaSelecionada);
						faces = new FacesMessage("Casa editada com sucesso!");
					} else {
						casaRN.salvar(casaSelecionada);
						faces = new FacesMessage("Casa cadastrada com sucesso!");
					}
				} else {
					faces = new FacesMessage("Obs: Quantidades acima de '0'");
				}
			} else {
				faces = new FacesMessage(
						"CASA JÁ CADASTRADA PARA ESTA OBRA!");
			}

			FacesContext contexto = FacesContext.getCurrentInstance();
			contexto.addMessage(null, faces);
			this.listaCasas = null;
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

		return null;
	}

	public String excluirCasa() {
		CasaRN casaRN = new CasaRN();
		casaRN.excluir(casaSelecionada);
		this.listaCasas = null;
		return null;
	}

	public String novaCasa() {
		this.casaSelecionada = new Casa();
		return null;
	}

}
